In [1]:
import os
import pandas as pd
from datetime import datetime
In [2]:
folders = [i for i in os.listdir(os.getcwd()) if '_bt' in i]
folders
Out[2]:
In [3]:
# In this cell, we concatenate all of the data together.
master_data = pd.DataFrame()
for folder in folders:
data = pd.read_csv('{0}/data.txt'.format(folder), header=None)
data.columns = ['tracker_id', 'dBm', 'year', 'month', 'day', 'hour', 'minute', 'second']
data['base_station_id'] = folder.split('_')[1]
master_data = master_data.append(data)
master_data['date'] = master_data.apply(lambda x: datetime(x['year'], x['month'], x['day'], x['hour'], x['minute'], x['second']), axis=1)
master_data = master_data.drop_duplicates()
master_data.reset_index(drop=True, inplace=True)
len(master_data)
Out[3]:
In [4]:
tracker_ids_time = {'F4:B8:5E:C4:54:BE':datetime(2016, 1, 28, 12, 1, 0),
'F4:B8:5E:DD:42:D2':datetime(2016, 1, 28, 9, 52, 0),
'F4:B8:5E:C4:5F:8C':datetime(2016, 1, 28, 10, 12, 0),
'F4:B8:5E:C4:8F:EE':datetime(2016, 1, 26, 9, 59, 0),
'68:9E:19:11:86:DB':datetime(2016, 1, 26, 9, 27, 0),
'F4:B8:5E:C4:63:25':datetime(2016, 1, 26, 11, 15, 0),
'74:DA:EA:A8:9D:0F':datetime(2016, 1, 26, 10, 55, 0),
'F4:B8:5E:DC:49:F8':datetime(2016, 1, 26, 10, 19, 0),}
In [5]:
master_data = master_data[master_data['tracker_id'].isin(tracker_ids_time.keys())]
master_data.head()
Out[5]:
In [6]:
day1_start = datetime(2016, 1, 26, 12, 37, 0)
day2_start = datetime(2016, 1, 27, 9, 42, 0)
day3_start = datetime(2016, 1, 28, 8, 25, 0)
day1_end = datetime(2016, 1, 26, 16, 30, 0)
day2_end = datetime(2016, 1, 27, 16, 30, 0)
day3_end = datetime(2016, 1, 28, 16, 30 ,0)
Perform the filtering for each tracker. Legitimate pings are the ones that occurred between the start and end times of each day, inclusive.
In [7]:
tracker_dfs = dict()
for i, (tracker_id, dt) in enumerate(tracker_ids_time.items()):
# tracker_id = some hexadecimal number.
# dt = the datetime object indicating the time at which the seal was finished sampling
tracker_dfs[tracker_id] = master_data[(master_data.tracker_id == tracker_id) & (master_data.date >= dt)]
trkr = tracker_dfs[tracker_id]
trkr = trkr[((trkr['date'] >= day1_start) & (trkr['date'] <= day1_end)) | \
((trkr['date'] >= day2_start) & (trkr['date'] <= day2_end)) | \
((trkr['date'] >= day3_start) & (trkr['date'] <= day3_end))]
tracker_dfs[tracker_id] = trkr
Below, we will print out each tracker as well as the number of pings it gave to any base station, and the time at which the pings occurred.
In [8]:
print(list(tracker_dfs.keys())[0])
tracker_dfs[list(tracker_dfs.keys())[0]]
Out[8]:
In [9]:
print(list(tracker_dfs.keys())[1])
tracker_dfs[list(tracker_dfs.keys())[1]]
Out[9]:
In [10]:
print(list(tracker_dfs.keys())[2])
tracker_dfs[list(tracker_dfs.keys())[2]]
Out[10]:
In [11]:
print(list(tracker_dfs.keys())[3])
tracker_dfs[list(tracker_dfs.keys())[3]]
Out[11]:
The above seal is the only one that stuck around, within some proximity, to a base station (BT5). From a technical standpoint, this is one example of a successful deployment of the tracker, in that we are able to detect a ping.
In [12]:
print(list(tracker_dfs.keys())[4])
tracker_dfs[list(tracker_dfs.keys())[4]]
Out[12]:
In [13]:
print(list(tracker_dfs.keys())[5])
tracker_dfs[list(tracker_dfs.keys())[5]]
Out[13]:
In [14]:
print(list(tracker_dfs.keys())[6])
tracker_dfs[list(tracker_dfs.keys())[6]]
Out[14]:
In [15]:
print(list(tracker_dfs.keys())[7])
tracker_dfs[list(tracker_dfs.keys())[7]]
Out[15]:
Just by simply eyeballing the data, this is what it looks like:
Let's raise money on Experiment! This should help us cover the costs of making more tiki base stations, and deploying more Bluetooth tags.
In [ ]:
In [ ]:
In [ ]: